home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 9
/
FM Towns Free Software Collection 9.iso
/
t_os
/
tool
/
huffman
/
huffman.bas
next >
Wrap
BASIC Source File
|
1994-11-16
|
2KB
|
76 lines
10 '------------------ハフマン記号生成プログラム J.HON------------------
11 '
20 SCREEN@0:COLOR 7,0,0:CLS
30 DIM 管理(100),P(100),確率(100),符号$(100)
40 '
50 *START
60 FOR I=0 TO 100:管理(I)=0:P(I)=0:確率(I)=0:符号$(I)="":NEXT
70 '
80 'データ作成
90 COLOR 2
100 PRINT"入力が完了したはずなのにノコリが例えば'1.226E-8'のようになった"
110 PRINT"時は,無視して[CR]を押して下さい ['EXIT'で終了です]"
120 COLOR 7
130 PRINT"小数第6位まで有効です"
140 M=0:L=0:P=1!
150 LOCATE 0,3:PRINT "確率ノコリ";P;" 通報 u=";M+1;"番目 "
160 LOCATE 0,4:PRINT STRING$(79," ")
170 LOCATE 0,4:INPUT "確率を入力してください([CR]で省略)";A$
175 IF A$="exit" OR A$="EXIT" THEN END
180 PP=VAL(A$):IF P<PP THEN BEEP:GOTO 150
190 P=P-PP
200 IF A$="" AND P>0 THEN PP=INT(P*1000000+.5!)/1000000:P=0
210 P(M)=PP:LOCATE 0,M+5:PRINT "P(u";M+1;")=";PP
220 M=M+1:IF P>0 THEN 150 'ELSE M=M-1
230 IF PP=0 THEN M=M-1
240 GOSUB *MAKE2
250 LEV=1:MIN2=0
260 '-------------------------符号作成-----------------------------------
270 GOSUB *MIN2
280 WHILE MIN1>0
290 確率(MIN1)=確率(MIN1)+確率(MIN2):'PRINT 確率(MIN1)
300 '符号
310 FOR II=1 TO M
320 IF 管理(II)=MIN1 THEN 符号$(II)="0"+符号$(II)
330 IF 管理(II)=MIN2 THEN 符号$(II)="1"+符号$(II)
340 NEXT
350 '委託
360 FOR II=1 TO M
370 IF 管理(II)=MIN2 THEN 管理(II)=MIN1:'委託
380 NEXT
390 GOSUB *MIN2
400 WEND
410 PRINT
420 '
430 '
440 '
450 L=0:H=0:GOSUB *MAKE2
460 FOR I=1 TO M
470 PRINT USING "U## & & Length=## P(U##)=#.######";I;符号$(I);LEN(符号$(I));I;確率(I)
480 L=L+LEN(符号$(I))*確率(I)
490 NEXT
500 PRINT "平均符号長L=";L
510 PRINT :PRINT "何かキーを押してください":X$=INPUT$(1)
520 '
530 CLS:GOTO *START
540 *MAKE2:FOR I=1 TO M:確率(I)=P(I-1):管理(I)=I:NEXT:RETURN
550 RETURN
560 '--------------------------------------------------------------------
570 *MIN2
580 MIN1=0:MIN2=0:MINIMUM=1
590 '最小
600 FOR II=1 TO M
610 IF 管理(II)=II AND MINIMUM>=確率(II) THEN MIN1=II:MINIMUM=確率(II)
620 NEXT
630 MINIMUM=1
640 '最小2
650 FOR II=1 TO M
660 IF 管理(II)=II AND MINIMUM>=確率(II) AND II<>MIN1 THEN MIN2=II:MINIMUM=確率(II)
670 NEXT
680 'IF MIN1>=MIN2 THEN SWAP MIN1,MIN2
690 IF MIN2=0 THEN SWAP MIN1,MIN2
700 RETURN
710 '
720 '
730 DATA 0.35,0.2,0.15,0.15,0.1,